package eva.savant.business.material.view

import eva.savant.businessobject.mt.Material
import eva.savant.businessobject.mt.Jerarquia
import eva.savant.businessobject.gl.Tipo
import eva.savant.core.view.Maestro
import org.apache.poi.hssf.usermodel.HSSFWorkbook

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct
import org.primefaces.model.UploadedFile
import org.primefaces.event.FileUploadEvent
import org.primefaces.model.StreamedContent
import org.primefaces.model.DefaultStreamedContent

@SessionScoped
@ManagedBean(name = 'IMMaterial')
public class IMMaterial extends Maestro {
    
  def  lsUVolumen, lsUPeso, lsUBase, lsTipo//, lsProperty, property

  StreamedContent image

  UploadedFile file

  @PostConstruct
  public void cleanEntity() {

    file= image= null

    entity= new Material(); init()

    entity.jerarquia= new Jerarquia(id: sociedad.id + '01')

    entity.tipo_volumen= new Tipo()

    entity.tipo_unidad= new Tipo()

    entity.tipo_clase= new Tipo()

    entity.tipo_peso= new Tipo()


    lsUVolumen = find(Tipo.class,'clase.id=?',sociedad.id + 'UV')

    lsUPeso = find(Tipo.class,'clase.id=?',sociedad.id + 'UP')

    lsUBase = find(Tipo.class,'clase.id=?',sociedad.id + 'UM')

    lsTipo = find(Tipo.class,'clase.id=?',sociedad.id + 'TM')


      //entityLsProperty.each { x ->

        //lsProperty.add(x.key)
      //}

      //property= null

  }

  public void editEntity(Object id) {

    entity= get(Material.class, id)

    if(entity.jerarquia    == null) entity.jerarquia= new Jerarquia(id: sociedad.id + '01')

    if(entity.tipo_volumen == null) entity.tipo_volumen= new Tipo()

    if(entity.tipo_unidad == null) entity.tipo_unidad= new Tipo()

    if(entity.tipo_clase == null) entity.tipo_clase= new Tipo()

    if(entity.tipo_peso == null) entity.tipo_peso= new Tipo()

    try { image= new DefaultStreamedContent(new URL('http://localhost/savanti/material/'+entity.codigo+'.jpg').openStream())

    } catch (Exception ignore) { }
  }

  public boolean mergeEntity(Object entity) { entity= (Material) entity

    def cod= entity.jerarquia.codigo; entity.jerarquia= get(Jerarquia.class, sociedad.id + cod)


    entity= merge(entity); if(file == null) return true


    def nameFile= resourcePath + 'material/' + entity.codigo + '.' + file.fileName.split('\\.')[1]

    new File(nameFile).delete()


    def f= new FileOutputStream(nameFile); f.write(file.contents); f.flush(); f.close()

    return true
  }

  public void uploadFile(FileUploadEvent event) {

    file= event.file

    image= new DefaultStreamedContent(new ByteArrayInputStream(file.contents),'image/png')
  }

  def lsUpdEntity

  public void updateMaster(FileUploadEvent event) {




    def workbook= new HSSFWorkbook(event.file.inputstream)

    if(workbook.numberOfSheets == 0) throw new Exception('El archivo no tiene contenido')

    lsUpdEntity= new ArrayList<Object>()


    def sheet = workbook.getSheetAt(0)

    for(int i=1; i<sheet.physicalNumberOfRows; i++) {

      def row= sheet.getRow(i)

      def id= stringCell(row,1)

      def nombre= stringCell( row,0);

      def length= nombre.length() < 100? nombre.length()-1 : 99


      def x= get(entity.class, sociedad.id + id)

      if(x == null) x= new Material(id : sociedad.id + id)


      x['codigo']= id

      x['rapido']= integerCell(row,2)

      x['nombre']= nombre[0..length]


       alta(x);

        println ' material ' + x['nombre'];

        lsUpdEntity.add(x) }


    //ls.each { x -> println 'merge material ' + x.value.nombre; merge(x.value) }
  }

}
